/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package miselania.Almacenamiento;

import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
 *
 * @author jhon
 */
public class GestorIOCatalogo {
     public void EscribirCatalogo(Catalogo C1)
    {
        try {
            
            
            //Se crea un Stream para guardar archivo
            ObjectOutputStream file = new ObjectOutputStream(new FileOutputStream( C1.getArchivoCatalogo() ));
            //creamos una nueva entrada (siel bojeto no  existe se escribe, sino :error)
            Map map=C1.getEntradas();
            Iterator itr = map.entrySet().iterator();
            while (itr.hasNext()) {
                Map.Entry e = (Map.Entry)itr.next();
                EntradaCatalogo EA=(EntradaCatalogo)e.getValue();
                EA.crearNombreArchivo();
                
                file.writeObject(EA);
            }    
            //se cierra archivo
            file.close();
        } 
        catch (IOException ex) {
            System.out.println(ex);
        }
    }
    //------------------------------------------------------------------
    //------------------------------------------------------------------
    //hay un problema para recorrer todas las tablas en memoria, solo me recoge la ultima tabla
    public Catalogo leerCatalogo(Catalogo C)
    {
        Catalogo C1 =new Catalogo(C.getArchivoCatalogo());
        try {
            //Stream para leer archivo
            ObjectInputStream file = new ObjectInputStream(new FileInputStream(C.getArchivoCatalogo()));
            //Se lee el objeto de archivo y este debe convertirse al tipo de clase que correspondeC1.getEntradas().clear();
            C1.getEntradas().clear();
            EntradaCatalogo Entrada1 = (EntradaCatalogo) file.readObject();
            C1.getEntradas().clear();
            C1.CrearNuevaEntrada(Entrada1);
           
            
           //System.out.println(Entrada2.toString());
            file.close();
            
            
            
            
        } catch (ClassNotFoundException ex) {
             System.out.println(ex);
        } catch (IOException ex) {
             System.out.println(ex);
       }
        
        return C1;
    }
    
    
    
   
    
    //----------------------------------------------------------------------------
    //----------------------------------------------------------------------------
    public static void main(String[] args) {
        
             
             GestorIOCatalogo MiGestor=new GestorIOCatalogo();
            //-----------------------------------------------
            //-----------------------------------------------
            List<Atributo> attrs = new ArrayList<>();
            attrs.add(new Atributo("character", Character.class));
            attrs.add(new Atributo("byte", Byte.class));
            attrs.add(new Atributo("short", Short.class));
            attrs.add(new Atributo("integer", Integer.class));
            attrs.add(new Atributo("long", Long.class));
            attrs.add(new Atributo("float", Float.class));
            attrs.add(new Atributo("double", Double.class));
            attrs.add(new Atributo("string", String.class));
            //-----------------------------------------------
            //-----------------------------------------------
            
            Tabla T1=new Tabla("TCliente",attrs);
            Tabla T2=new Tabla("TCientito",attrs); 
            
            
            EntradaCatalogo E1=new EntradaCatalogo(T1);
            EntradaCatalogo E2=new EntradaCatalogo(T2);
            Catalogo miCatalogo=new Catalogo("D:/temporal/archivo.dat");
            miCatalogo.CrearNuevaEntrada(E1);
            miCatalogo.CrearNuevaEntrada(E2);
            
                       
            System.out.println("ESCRIBIMOS CATALOGO EN DISCO");
            System.out.println("=====================================");
            MiGestor.EscribirCatalogo(miCatalogo);
            
            System.out.println(miCatalogo.toString());
            System.out.println("LEEMOS EL CATALOGO");
            System.out.println("==================");
            System.out.println(MiGestor.leerCatalogo(miCatalogo));
            
}
}